package com.ffcs.crmd.tsp.common.job.entity;
import com.thoughtworks.xstream.annotations.XStreamAliasType;

/**
 * 
 * 功能说明:恢复策略
 *
 * @author FFCS-ZHONGFUHUA
 * 
 * @since 1.0.0-SNAPSHOT
 *
 * @see com.ffcs.crmd.tsp.api.dto.enu.JobMisfireInstruction
 */
@XStreamAliasType("MisfireInstruction")
@Deprecated
public enum MisfireInstruction {
    
    /**
     * 合适的时候全部触发恢复
     */
    IGNORE_MISFIRE_POLICY,
    
    /**
     * 立即执行，不会丢失misfire job，跟
     * MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT差不多策略
     */
    SMART_POLICY,
    
    /**
     * 立即执行，会丢失misfire job，适用于1次的任务，如果重复次数>0等效于
     * MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
     */
    FIRE_AND_PROCEED,
    
    /**
     * value = 2  (cron任务)
     * 什么都不做
     */
    DO_NOTING,
    
    /**
     * value = 1  (simple任务)
     * 立即执行，会丢失misfire job，适用于1次的任务，如果重复次数>0等效于
     * MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
     * 
     */
    FIRE_NOW,
    
    /**
     * value = 2 (simple任务)
     * 立即执行，不会丢失misfire job，从当前时刻开始重新计算每次执行时间点，重做misfire的job 
     * 如：3s执行一次，重复执行5次，05:24:44开始，每次时间点理应是：05:24:47，05:24:50，05:24:53，05:24:56，05:24:59 
     * 但由于第一次执行用了11s，到05:24:55结束，那么从05:24:55开始重新计算剩余次数5次的每次执行的时间点，
     * 那么剩余执行调度的时间点是：05:24:55，05:24:58，05:25:01，05:25:04，05:25:07
     * 
     */
    RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT,
    
    /**
     * value = 3 (simple任务)
     * 立即执行，misfire job不会再执行，继续重复执行的次数等于本次+剩余的次数，即剩余次数+1. 
     * 如: 3s执行一次，重复执行5次，05:08:11开始，每次时间点理应是：05:08:14，05:08:17，05:08:20，05:08:23，05:08:26。
     * 但由于第一次执行用了11s，到05:08:22结束，那么从05:08:22开始重新计算剩余次数2次+本次的每次执行的时间点， 
     * 那么剩余执行调度的时间点是：05:08:22,05:08:25,05:08:28
     */
    RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT,
    
    /**
     * value = 4 (simple任务)
     * 立即执行，misfire job不会再执行，继续重复执行的次数等于本次+剩余的次数，即剩余次数+1. 
     * 如: 3s执行一次，重复执行5次，05:08:11开始，每次时间点理应是：05:08:14，05:08:17，05:08:20，05:08:23，05:08:26。
     * 但由于第一次执行用了11s，到05:08:22结束，那么从05:08:23开始重新计算剩余次数2次+本次的每次执行的时间点， 
     * 那么剩余执行调度的时间点是：05:08:23,05:08:26,05:08:29
     */
    RESCHEDULE_NEXT_WITH_REMAINING_COUNT,

    /**
     * value = 5 (simple任务)
     * 立即执行，不会丢失misfire job，从下一次时刻开始重新计算每次执行时间点，重做misfire的job 
     * 如：3s执行一次，重复执行5次，05:24:44开始，每次时间点理应是：05:24:47，05:24:50，05:24:53，05:24:56，05:24:59 
     * 但由于第一次执行用了11s，到05:24:55结束，那么从05:24:56开始重新计算剩余次数5次的每次执行的时间点，
     * 那么剩余执行调度的时间点是：05:24:56，05:24:59，05:25:02，05:25:05，05:25:09
     * 
     */
    RESCHEDULE_NEXT_WITH_EXISTING_COUNT
    
}